class Solution {
public:
    int minCost(vector<vector<int>>& costs) {
        int n=costs.size();//楼层数、
        vector<vector<int>> dp(n+1,vector<int>(3));       //每层选3种颜色的最小花费
        //多开一行（列开3列-3种颜色）
        for(int i=1;i<=n;i++)
        {
            dp[i][0]=min(dp[i-1][1],dp[i-1][2])+costs[i-1][0];       //本层选红色min=上层选蓝或绿min+本层刷红
            dp[i][1]=min(dp[i-1][0],dp[i-1][2])+costs[i-1][1];
            dp[i][2]=min(dp[i-1][0],dp[i-1][1])+costs[i-1][2];
        }
        //返回第n-1层最小花费(多开了一行)
        int ret=INT_MAX;
        for(int j=0;j<3;j++)
        {
            ret=min(ret,dp[n][j]);

        }
        return ret;
    }
};